/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.saber.certificacao.modelos.validadores;

import br.com.saber.certificacao.ejbs.stateless.interfaces.ProvaBeanLocal;
import br.com.saber.certificacao.enums.TipoQuestao;
import br.com.saber.certificacao.modelos.Prova;
import br.com.saber.certificacao.modelos.relacionamentos.ProvaQuestao;
import br.com.saber.certificacao.modelos.validadores.exceptions.ProvaException;
import br.com.saber.certificacao.modelos.validadores.exceptions.generica.ValidacaoExcecao;
import br.com.saber.certificacao.modelos.validadores.interfaces.ValidadorInterface;
import org.apache.commons.lang.StringUtils;

/**
 *
 * @author gbvbahia
 */
public class ProvaValidador implements ValidadorInterface<Prova, ProvaBeanLocal> {

    private void validar(Prova entidade, ProvaBeanLocal bean) throws ValidacaoExcecao {
        if (StringUtils.isBlank(entidade.getCertificacao())) {
            lancarException("provaCertificacaoNula", "Certificação");
        }
        if (StringUtils.isBlank(entidade.getVersaoNome())) {
            lancarException("provaVersaoNula", "Versão");
        }
        if (entidade.getTipoProva() == null) {
            lancarException("provaTipoNula", "Tipo de Prova");
        }
        if (entidade.getNotaParaPassar() == null) {
            lancarException("provaNotaRequeridaNula", "Média Cobrada");
        }
        if (entidade.getDataCriacao() == null) {
            lancarException("provaDataCriacaoNula", "Data Criação");
        }
        if (entidade.getAluno() == null) {
            lancarException("provaAlunoCriacaoRequerido", "Aluno");
        }
        if (entidade.isProvaTerminada() && entidade.getNotaTirada() == null) {
            lancarException("provaAlunoSemNota", "Nota Tirada");
        }
        for (ProvaQuestao provaQuestao : entidade.getQuestoesDestaProva()) {
            if (provaQuestao.getQuestao().getTipoQuestao().equals(TipoQuestao.UNICA_ESCOLHA)
                    && provaQuestao.getRespostasMarcadasNaProva().size() > 1) {
                lancarException("provaUnicaEscolhaMaisDeUmaResposta", "Respostas");
            }
        }
    }

    private void lancarException(String msg, String atributo) {
        ProvaException pe = new ProvaException(msg);
        pe.setAtributoName(atributo);
        throw pe;
    }

    @Override
    public void validar(Prova entidade, ProvaBeanLocal bean, Object object) throws ValidacaoExcecao {
        this.validar(entidade, bean);
    }
}
